<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>new实现</title>
</head>
<body>
    <script>
        // new实现分为四个步骤
        //1.创建一个Object对象
        //2.修改Object的原型链，指向构造函数的原型对象
        //3.调用构造函数，改变构造函数的this指向，指向Object
        //4.判断对象类型，如果是Object，直接返回处理结果，如果是基本类型，则返回Object

function Person(name, age){
    this.name = name,
    this.age = age
}

function myNew(constructor, ...args){
    //1.创建一个Object对象
    var obj = new Object();
    //2.修改Object的原型链，指向构造函数的原型对象
    Object.setPrototypeOf(obj, constructor.prototype)
    //3.调用构造函数，改变构造函数的this指向，指向Object
    var result = constructor.call(obj, ...args)
    //4.判断对象类型，如果是Object，直接返回处理结果，如果是基本类型，则返回Object
    console.log(result);
    return result instanceof Object ? result : obj
}

var  p = myNew(Person, '张三', 18)
console.log(p);
    </script>
</body>
</html>